import axios from 'axios'
import Vue from 'vue'
import router from '../router/index.js'

axios.defaults.baseURL = '/api'
axios.defaults.timeout = 10000
// axios.defaults.retry = 3
// axios.defaults.retryDelay = 1000

axios.interceptors.request.use(
    config => {
        // config.headers.Authorization = `Bearer ${sessionStorage.getItem(token)}`
        if (config.method === 'post' || config.method === 'put') {
            for (let key in config.data) {
                config.data[key] = config.data[key] || null
            }
        }
        return config
    },
    error => {
        return Promise.reject(error)
    }
)

axios.interceptors.response.use(
    response => {
        if (response.data.code === 0 || response.data.code === 1002) {
            return response.data
        } else {
            Vue.prototype.$message.error(response.data.message)
            // return response
        }
    },
    error => {
        if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
            Vue.prototype.$message.error('请求服务器超时')
            // console.log(error.config)
            // const config = error.config
            // if (!config || !config.retry) {
            //     Vue.prototype.$message.error('请求服务器超时')
            // } else {
            //     config.__retryCount = config.__retryCount || 0
            //     if (config.__retryCount >= config.retry) {
            //         Vue.prototype.$message.error('请求服务器超时!')
            //     } else {
            //         Vue.prototype.$message.error('正在重试:' + config.__retryCount)
            //         config.__retryCount += 1
            //         const backoff = new Promise(function (resolve) {
            //             setTimeout(function () {
            //                 resolve()
            //             }, config.retryDelay || 1000)
            //         })
            //         return backoff.then(() => {
            //             return axios(config)
            //         })
            //     }
            // }
        } else {
            switch (error.response.status) {
                case 401:
                    Vue.prototype.$message.error('您还没有登录，或登录超时，请登录')
                    router.push({ name: 'login' })
                    break
                case 403:
                    router.push({ name: '403' })
                    break
                case 404:
                    router.push({ name: '404' })
                    break
                case 500:
                    router.push({ name: '500' })
                    break
                default:
                    router.push({ name: '500' })
                // Vue.prototype.$message.error('请求服务器出错了')
                // return Promise.reject(err)
            }
        }
    }
)

export default axios
